import { fileURLToPath, URL } from 'node:url'
import { defineConfig ,loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools'
import { viteMockServe } from 'vite-plugin-mock'
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
import path from "path";
import { resolve } from 'node:path'
/** 
 * base
 * 类型： string
    默认： /
    相关： server.origin
    开发或生产环境服务的公共基础路径。合法的值包括以下几种：

    绝对 URL 路径名，例如 /foo/
    完整的 URL，例如 https://foo.com/（原始的部分在开发环境中不会被使用）
    空字符串或 ./（用于嵌入形式的开发）

    mockPath: "@/mock/index.ts", 
        localEnabled: command === 'serve',

        supportTs:false,
      logger: false,
      mockPath: "./mock/"   // 注意：此时的 mockPath 地址是真正安装的 mock 文件夹的地址;

        viteMockServe({
        supportTs: true,
        mockPath: 'mock',
        localEnabled: command === 'serve',
        prodEnabled: command !== 'serve' && prodMock,
        injectCode: `
          import { setupProdMockServer } from './mockProdServer';
          setupProdMockServer();
        `
      })

      localEnabled: true,//设置是否启用本地mock文件
      prodEnabled:true//设置打包是否启用mock功能

      图标的参考：https://blog.csdn.net/CYL_2021/article/details/135556057
 */

// https://vitejs.dev/config/
export default defineConfig(({ mode})=>{//,command 
  const env = loadEnv(mode, process.cwd());
	// ****打包文件名称****
	let fileName = 'dist'
	// 兼容性，以防打包崩溃
	fileName = "./dist/"+env.VITE_APP_NAME;


  return{
  
    plugins: [
      vue(),
      vueJsx(),
      vueDevTools(),
      viteMockServe({
        mockPath: './src/mock/',//设置模拟数据的存储文件夹
        //@ts-ignore
        supportTs: true,
        localEnabled: true,//设置是否启用本地mock文件
        prodEnabled:true,//设置打包是否启用mock功能
        injectCode: `
          import { setupProdMockServer } from './src/mock/mockProdServer.ts';
          setupProdMockServer();
        `
      }),
      createSvgIconsPlugin({
        // 指定目录(svg存放目录）
        iconDirs: [path.resolve(process.cwd(), "src/assets/icons/svgs")],
        // 使用 svg 图标的格式（name为图片名称）
        symbolId: "icon-[name]",
        //生成组件插入位置 只有两个值 boby-last | body-first
        inject: 'body-last'
      })
    ],
    server: {
      host: '0.0.0.0',//配置域名
      port: 8181,
      open: false,
      proxy: {
        ['/api']: {
          target: 'http://localhost:3002',
          changeOrigin: true,
          ws: true,
          rewrite: (path) => path.replace(new RegExp('^/api'), '')
        }
      }
    },
    // define: {
		// 	'process.env': {}
		// },
    // base:'./',
    // root: process.cwd(),//类型： string 默认： process.cwd() ：项目根目录（index.html 文件所在的位置）。可以是一个绝对路径，或者一个相对于该配置文件本身的相对路径。
    base: env.VITE_ENV === 'production' ? './' : './',//开发或生产环境服务的公共基础路径。
    // assetsInclude: '**/*.xlsx',
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    css: {
      preprocessorOptions: {
        css: { charset: false } ,
        less: {
          javascriptEnabled: true,
          additionalData: `
          @import "${path.resolve(__dirname, 'src/themes/variables.less')}";
          @import "${path.resolve(__dirname, 'src/themes/themes.less')}";
        `
        }
      } 
      
    },
        //****这里进行设置文件名****
		build: {
			outDir: fileName,
			// assetsPublicPath: './'
		}
  }
})
